curl --request POST \
--url https://api.evermind.ai/api/v2/memory/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "outdoor hobbies",
"method": "hybrid",
"top_k": 10,
"include_profile": true
}
'import requests
url = "https://api.evermind.ai/api/v2/memory/search"
payload = {
"query": "outdoor hobbies",
"method": "hybrid",
"top_k": 10,
"include_profile": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'outdoor hobbies', method: 'hybrid', top_k: 10, include_profile: true})
};
fetch('https://api.evermind.ai/api/v2/memory/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.evermind.ai/api/v2/memory/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'outdoor hobbies',
'method' => 'hybrid',
'top_k' => 10,
'include_profile' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evermind.ai/api/v2/memory/search"
payload := strings.NewReader("{\n \"query\": \"outdoor hobbies\",\n \"method\": \"hybrid\",\n \"top_k\": 10,\n \"include_profile\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evermind.ai/api/v2/memory/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"outdoor hobbies\",\n \"method\": \"hybrid\",\n \"top_k\": 10,\n \"include_profile\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evermind.ai/api/v2/memory/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"outdoor hobbies\",\n \"method\": \"hybrid\",\n \"top_k\": 10,\n \"include_profile\": true\n}"
response = http.request(request)
puts response.read_body{
"request_id": "<string>",
"data": {
"episodes": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"summary": "<string>",
"subject": "<string>",
"episode": "<string>",
"type": "<string>",
"score": 123,
"user_id": "<string>",
"session_id": "<string>",
"sender_ids": [
"<string>"
],
"readable_episode": "<string>",
"atomic_facts": [
{
"id": "<string>",
"content": "<string>",
"score": 123
}
],
"tags": [
"<string>"
]
}
],
"profiles": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"user_id": "<string>",
"profile_data": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"score": 123
}
],
"agent_cases": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"agent_id": "<string>",
"session_id": "<string>",
"task_intent": "<string>",
"approach": "<string>",
"quality_score": 123,
"timestamp": "2023-11-07T05:31:56Z",
"score": 123,
"key_insight": "<string>"
}
],
"agent_skills": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"agent_id": "<string>",
"name": "<string>",
"description": "<string>",
"content": "<string>",
"confidence": 123,
"maturity_score": 123,
"score": 123,
"source_case_ids": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"unprocessed_messages": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"session_id": "<string>",
"sender_id": "<string>",
"role": "user",
"content": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"sender_name": "<string>",
"tool_calls": [
{
"id": "<string>",
"function": {
"name": "<string>",
"arguments": "<string>"
},
"type": "function"
}
],
"tool_call_id": "<string>"
}
]
}
}{}{}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{}{}Search memories [OSS + Cloud]
Retrieve the memories relevant to a query.
Exactly one of user_id / agent_id is required, and it decides what comes back: a user owner returns episodes (plus profiles with include_profile), an agent owner returns agent cases and skills. All result collections are always present in the response, empty when they do not apply.
The vector-backed methods read an index that lags extraction by seconds — to read back something just extracted, use /api/v2/memory/get.
curl --request POST \
--url https://api.evermind.ai/api/v2/memory/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "outdoor hobbies",
"method": "hybrid",
"top_k": 10,
"include_profile": true
}
'import requests
url = "https://api.evermind.ai/api/v2/memory/search"
payload = {
"query": "outdoor hobbies",
"method": "hybrid",
"top_k": 10,
"include_profile": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'outdoor hobbies', method: 'hybrid', top_k: 10, include_profile: true})
};
fetch('https://api.evermind.ai/api/v2/memory/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.evermind.ai/api/v2/memory/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'outdoor hobbies',
'method' => 'hybrid',
'top_k' => 10,
'include_profile' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evermind.ai/api/v2/memory/search"
payload := strings.NewReader("{\n \"query\": \"outdoor hobbies\",\n \"method\": \"hybrid\",\n \"top_k\": 10,\n \"include_profile\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evermind.ai/api/v2/memory/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"outdoor hobbies\",\n \"method\": \"hybrid\",\n \"top_k\": 10,\n \"include_profile\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evermind.ai/api/v2/memory/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"outdoor hobbies\",\n \"method\": \"hybrid\",\n \"top_k\": 10,\n \"include_profile\": true\n}"
response = http.request(request)
puts response.read_body{
"request_id": "<string>",
"data": {
"episodes": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"summary": "<string>",
"subject": "<string>",
"episode": "<string>",
"type": "<string>",
"score": 123,
"user_id": "<string>",
"session_id": "<string>",
"sender_ids": [
"<string>"
],
"readable_episode": "<string>",
"atomic_facts": [
{
"id": "<string>",
"content": "<string>",
"score": 123
}
],
"tags": [
"<string>"
]
}
],
"profiles": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"user_id": "<string>",
"profile_data": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"score": 123
}
],
"agent_cases": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"agent_id": "<string>",
"session_id": "<string>",
"task_intent": "<string>",
"approach": "<string>",
"quality_score": 123,
"timestamp": "2023-11-07T05:31:56Z",
"score": 123,
"key_insight": "<string>"
}
],
"agent_skills": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"agent_id": "<string>",
"name": "<string>",
"description": "<string>",
"content": "<string>",
"confidence": 123,
"maturity_score": 123,
"score": 123,
"source_case_ids": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"unprocessed_messages": [
{
"id": "<string>",
"app_id": "<string>",
"project_id": "<string>",
"session_id": "<string>",
"sender_id": "<string>",
"role": "user",
"content": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"sender_name": "<string>",
"tool_calls": [
{
"id": "<string>",
"function": {
"name": "<string>",
"arguments": "<string>"
},
"type": "function"
}
],
"tool_call_id": "<string>"
}
]
}
}{}{}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{}{}Authorizations
API key issued by EverOS, sent as Authorization: Bearer <api_key>.
Body
The natural-language query to retrieve against.
1Scope to search in, defaulting to "default". Must match the pair used on write.
Second half of the scope, defaulting to "default".
Search one user's memories — matched against the messages' sender_id. Exactly one of user_id / agent_id is required.
1Search one agent's memories (cases and skills). Exactly one of user_id / agent_id is required.
1Retrieval strategy. "keyword" is lexical, "vector" is embedding similarity, "hybrid" (default) combines both, and "agentic" lets the engine run a multi-round LLM-guided retrieval — more thorough, slower.
keyword, vector, hybrid, agentic Maximum number of hits. Either -1 (the default, letting the engine decide) or a value from 1 to 100; anything else is rejected with 422.
Vector-similarity radius, 0.0–1.0. Unset leaves it to the engine.
0 <= x <= 1Post-fusion score floor, 0.0–1.0. Applies to the episode hybrid (hierarchy) path only; other paths ignore it. The hybrid path fuses its two routes into a probability, so unlike a raw keyword or vector score this floor is an absolute bar and 0.0–1.0 is the real range.
0 <= x <= 1Also return the user's profile alongside the hits, saving a second call. Ignored for an agent owner, whose results carry no profiles.
Attach a human-readable rendering of each episode to the returned items, for display only — it is not indexed, filterable or scored, and callers fall back to episode when it is null. Ignored for an agent owner.
Opt-in LLM rerank, and only for hybrid agent_case / agent_skill retrieval. The episode hybrid path has its own fact eviction and ignores this, as do keyword, vector and agentic.
Optional filter tree — recursive AND / OR arrays mixed with the scalar conditions being matched.
Show child attributes
Show child attributes
Was this page helpful?

